#include "naplo.hpp"
#include "naplofajl.hpp"
#include "jatekmenet.hpp"
#include "hibakodok.hpp"
#include <sstream>
#include <ctime>

using namespace std;

string Naplo::fajlNev() {
    stringstream ss;
    char tmp[1024];
    string nev = "";
    time_t ido = time(NULL);
    if (mi0.compare(mi1)) {
        sprintf(tmp, NAPLO_FAJLNEV, mi0.c_str(), mi1.c_str(), (int)ido);
        ss << tmp;
    } else {
        sprintf(tmp, NAPLO_FAJLNEV, mi1.c_str(), mi0.c_str(), (int)ido);
        ss << tmp;
    }
    ss >> nev;
    return nev;
}

Naplo::Naplo(string miX, string miO, int pX, int pY) : palyaX(pX), palyaY(pY) {
    mi0 = miX.substr(miX.find_last_of("/\\") + 1);
    mi1 = miO.substr(miO.find_last_of("/\\") + 1);
    bezarva = true;
}

void Naplo::fejlec() {
    char tmp[1024];
    naploFajl.open(fajlNev().c_str(), fstream::out);
    sprintf(tmp, NAPLO_FEJLEC, mi0.c_str(), mi1.c_str(), palyaX, palyaY);
    naploFajl << tmp;
    bezarva = false;
}

void Naplo::lablec(int allapot, int indoklas) {
    char tmp[1024];
    if (bezarva) throw NAPLO_MAR_BEZARVA;
    switch (allapot) {
        case PALYA_ALLAPOT_X_NYERT:
            sprintf(tmp, NAPLO_VEGEREDMENY_NYERTES, "X");
            break;
        case PALYA_ALLAPOT_O_NYERT:
            sprintf(tmp, NAPLO_VEGEREDMENY_NYERTES, "O");
            break;
        case PALYA_ALLAPOT_DONTETLEN:
            sprintf(tmp, NAPLO_VEGEREDMENY_DONTETLEN);
            break;
        default:
            throw NAPLO_ERVENYTELEN_ALLAPOT;
            break;
    }
    naploFajl << tmp;
    switch (indoklas) {
        case INDOKLAS_TISZTA: sprintf(tmp, NAPLO_INDOKLAS_TISZTA_GYOZELEM);
            break;
        case INDOKLAS_ERVENYTELEN_LEPES: sprintf(tmp, NAPLO_INDOKLAS_ERVENYTELEN_LEPES);
            break;
        case INDOKLAS_PALYA_BETELT: sprintf(tmp, NAPLO_INDOKLAS_MEGTELT_PALYA);
            break;
    }
    naploFajl << tmp;
    naploFajl.flush();
    naploFajl.close();
    bezarva = true;
}

void Naplo::lepes(int mi, int x, int y) {
    char tmp[1024];
    if (bezarva) throw NAPLO_MAR_BEZARVA;
    char karakter = (mi == 0) ? 'X' : 'O';
    sprintf(tmp, NAPLO_LEPES, karakter, x, y);
    naploFajl << tmp;
}
